package algorithm.templates;

/**
 * @author SeonExlike
 * @since 2024/4/16
 */
public class BacktrackTemplate {
    public static void main(String[] args) {
        backtrack();
    }

    public static void backtrack(Object... args) {
        /*
        if (终止条件) {
            存放结果
            return;
        }
        for (选择 ：本层集合的元素) {
            //处理节点
            backtrack(路径，选择列表); //递归
            // 回溯，撤销处理结果
        }
         */

        /*
        回溯一搬常用来解决问题的方法
        组合问题：N个数里面按照一定规则找到K个数的集合
        切割问题：一个字符串中按照某种规则进行切割，能切割出多少种结果
        子集问题：一个N个数的集合中有多少个符合条件的子集
        排列问题：N个数按照一定规则排序，能有多少种全排列
        棋盘问题：N皇后，解数独等等。
         */
    }
}
